﻿using System;
using élénkPróbája.native.rule;

namespace élénkPróbája
{
    public interface ITestAdmin<T, out TProperty> : IFluentInterface
    {
        /// <summary>
        /// Associates a validator with this the property for this rule builder.
        /// </summary>
        /// <param name="validator">The validator to set</param>
        /// <returns></returns>
        ITestAdminOptions<T, TProperty> SetValidator(ILitPropertyValidator validator);

        /// <summary>
        /// Associates an instance of IValidator with the current property rule.
        /// </summary>
        /// <param name="validator">The validator to use</param>
        ITestAdminOptions<T, TProperty> SetValidator(IValidator<TProperty> validator);

        /// <summary>
        /// Associates a validator provider with the current property rule.
        /// </summary>
        /// <param name="validatorProvider">The validator provider to use</param>
        ITestAdminOptions<T, TProperty> SetValidator<TValidator>(Func<T, TValidator> validatorProvider)
            where TValidator : IValidator<TProperty>;
    }

    public interface ITestAdminOptions<T, out TProperty> : ITestAdmin<T, TProperty>,
        IConfigurable<PropRule, ITestAdminOptions<T, TProperty>>
    {
        
    }

    public interface ITestAdminInitial<T, out TProperty> : IFluentInterface, ITestAdmin<T, TProperty>, IConfigurable<PropRule, ITestAdminInitial<T, TProperty>>
    {

    }
}